package br.com.jvet.persistencia;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root;

import br.com.jvet.entidade.Produto;

@Stateless
public class ProdutoDAO extends AbstractDAO<Produto, Integer> {

	private static String SELECT_EXISTE = "SELECT p from "
			+ Produto.class.getSimpleName()
			+ " p where upper(p.descricao) =:descricao";

	public ProdutoDAO() {
		super(Produto.class);
	}

	@EJB
	private MovimentacaoDAO movimentacaoDAO;

	public boolean existe(Produto produto) {
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters
				.put("descricao", produto.getDescricao().toUpperCase().trim());

		Produto outro = super.buscarUmResultado(SELECT_EXISTE, parameters);
		if (outro != null && outro.getCodigo() != produto.getCodigo()) {
			return true;
		}
		return false;
	}

	public List<Produto> buscarProdutoPorParametro(
			Map<String, Object> parameters) {

		CriteriaBuilder cb = super.getEntityManager().getCriteriaBuilder();
		CriteriaQuery<Produto> cq = cb.createQuery(Produto.class);

		Root<Produto> root = cq.from(Produto.class);
		cq.select(root);

		if (parameters.containsKey("categoria")) {
			Path<String> name = root.get("categoria");
			cq.where(cb.and(cb.equal(name, parameters.get("categoria"))));
		}

		TypedQuery<Produto> query = super.getEntityManager().createQuery(cq);

		System.out.println(query.getResultList());
		return query.getResultList();

	}

	

}
